<?php

/*
 * 公共方法类
 */
class common {
    function __construct() {

    }

    /**
     * @param string $server 服务器地址
     * @param string $curlPost post数据，如：name=toy&age=22
     * @return string 页面返回值
     */
    public static function post($server,$curlPost){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $server);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 80);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
        $data = curl_exec($ch);
        curl_close($ch);

        return $data;
    }

    /**
     * @param null
     * @return string 客户端IP地址
     */
    public static function getClientIP(){
        if ($_SERVER["REMOTE_ADDR"]){
            $ip = $_SERVER["REMOTE_ADDR"];
        }else if (getenv("HTTP_X_FORWARDED_FOR")) {
            $ip = getenv("HTTP_X_FORWARDED_FOR");
        }else if (getenv("HTTP_CLIENT_IP")){
            $ip = getenv("HTTP_CLIENT_IP");
        }else if (getenv("REMOTE_ADDR")) {
            $ip = getenv("REMOTE_ADDR");
        }else{
            $ip = -1;
        }

        return $ip;
    }

    /**************************************************************
     *
     *	@param	string	&$arr		要处理的字符串
     *	@param	string	$function	要执行的函数
     *	@return boolean	$key_also	是否也应用到key上
     *	@desc  使用特定function对数组中所有元素做处理
     *
     *************************************************************/
    public static function arrRecursive(&$arr, $function, $key_also=false){
        static $recu_num = 0;

        if (++$recu_num > 1000) {
            die('possible deep recursion attack');
        }
        foreach ($arr as $key => $value) {
            if (is_array($value)) {
                arrRecursive($arr[$key], $function, $key_also);
            } else {
                $arr[$key] = $function($value);
            }

            if ($key_also && is_string($key)) {
                $new_key = $function($key);
                if ($new_key != $key) {
                    $arr[$new_key] = $arr[$key];
                    unset($arr[$key]);
                }
            }
        }

        $recu_num--;
    }

    /**************************************************************
     *
     *	@param	array	$arr  要转换的数组
     *	@return string	$json 转换得到的json字符串
     *	@desc  将数组转换为JSON字符串（兼容中文）
     *
     *************************************************************/
    public static function jsonEncode($arr) {
        Common_class::arrRecursive($arr, 'urlencode', true);
        $json = json_encode($arr);

        return urldecode($json);
    }


    /**************************************************************
     *
     *	@param	array	$arr  要转换的数组
     *	@return string	$json 转换得到的json字符串
     *	@desc  将数组转换为JSON字符串（兼容中文）
     *
     *************************************************************/
    public static function jsonDecode($json) {
        $arr = json_decode($json);
        Common_class::arrRecursive($arr, 'urldecode', true);

        return $arr;
    }

    public static function getModelNameByModelId($id){
        $model = Controller::createMode('db_sys','t_sys_model');
        $data = $model->getOne(array('id'=>$id));
        return $data['model_name'];
    }

    /**
     *  记录操作日志
     * @param $action
     * @param $title
     * @param $content
     */
    public static function insertOperateLog($action,$title,$content,$op_sql=''){
        Controller::createMode('db_sys','t_sys_log_operate')->insert(
            array(
                'user_name'=>LoginHelper::getUserName(),
                'action'=> $action,
                'content'=> $content,'title'=> $title,
                'op_sql'=> $op_sql,
                'title'=> $title,
                'user_id'=>LoginHelper::getUserId(),
                'login_ip'=>http::getIp()));
    }
}

